#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
指标分类脚本
将财务指标按照分析类别进行分类，生成行业指标字典表
"""

import pandas as pd

def create_indicator_classification():
    """创建指标分类字典"""
    
    # 定义指标分类
    classification = {
        # 盈利能力分析
        'EBITDA率(%)': '盈利能力分析',
        '净资产收益率(%)': '盈利能力分析',
        '总资产收益率(%)': '盈利能力分析',
        '销售营业利润率(%)': '盈利能力分析',
        '国有资本回报率(%)': '盈利能力分析',
        '经济增加值率(%)': '盈利能力分析',
        '资本保值增值率(%)': '盈利能力分析',
        
        # 经营周转能力分析
        '存货周转率(次)': '经营周转能力分析',
        '应收账款周转率(次)': '经营周转能力分析',
        '总资产周转率(次)': '经营周转能力分析',
        '流动资产周转率(次)': '经营周转能力分析',
        
        # 偿债能力分析
        '带息负债比率(%)': '偿债能力分析',
        '资产负债率(%)': '偿债能力分析',
        '速动比率': '偿债能力分析',
        '现金流动负债比率(%)': '偿债能力分析',
        '已获利息倍数(倍)': '偿债能力分析',
        '盈余现金保障倍数(倍)': '偿债能力分析',
        '营业现金比率(%)': '偿债能力分析',
        
        # 成长能力分析
        '利润总额增长率(%)': '成长能力分析',
        '营业总收入增长率(%)': '成长能力分析',
        
        # 资本性支出分析
        '技术投入比率(%)': '资本性支出分析',
        '研发经费投入强度(%)': '资本性支出分析',
        
        # 成本控制分析
        '百元收入支付的成本费用(元)': '成本控制分析',
        '两金占流动资产比重(%)': '成本控制分析',
        
        # 人力资源效率分析
        '全员劳动生产率(万元/人)': '人力资源效率分析'
    }
    
    return classification

def generate_indicator_dictionary():
    """生成行业指标字典表"""
    
    print("=" * 60)
    print("行业指标字典表生成")
    print("=" * 60)
    
    # 获取分类字典
    classification = create_indicator_classification()
    
    # 创建DataFrame
    df_dict = pd.DataFrame([
        {'指标名称': indicator, '指标大类': category}
        for indicator, category in classification.items()
    ])
    
    # 按指标大类和指标名称排序
    df_dict = df_dict.sort_values(['指标大类', '指标名称'])
    
    # 保存为Excel文件
    output_file = "行业指标字典表.xlsx"
    with pd.ExcelWriter(output_file, engine='openpyxl') as writer:
        df_dict.to_excel(writer, sheet_name='指标字典', index=False)
    
    print(f"✅ 指标字典表已生成: {output_file}")
    print(f"📊 总指标数量: {len(df_dict)}")
    
    # 按类别统计
    category_counts = df_dict['指标大类'].value_counts()
    print(f"\n📋 各类别指标数量:")
    for category, count in category_counts.items():
        print(f"  {category}: {count}个指标")
    
    # 显示完整的分类结果
    print(f"\n📝 完整分类结果:")
    print("指标名称\t指标大类")
    print("-" * 80)
    
    for _, row in df_dict.iterrows():
        print(f"{row['指标名称']}\t{row['指标大类']}")
    
    return df_dict

def create_integrated_data():
    """创建包含指标分类的完整数据表"""
    
    try:
        # 读取现有的行业指标数据
        df_data = pd.read_excel('整理后的行业指标数据.xlsx', sheet_name='整理后数据')
        
        # 获取指标分类
        classification = create_indicator_classification()
        
        # 添加指标大类列
        df_data['指标大类'] = df_data['指标名称'].map(classification)
        
        # 重新排列列顺序
        columns_order = ['行业名称', '指标大类', '指标名称', '年份', '优秀值', '良好值', '平均值', '较低值', '较差值']
        df_data = df_data[columns_order]
        
        # 排序
        df_data = df_data.sort_values(['指标大类', '行业名称', '指标名称', '年份'])
        
        # 保存完整数据
        output_file = "行业指标数据_含分类.xlsx"
        with pd.ExcelWriter(output_file, engine='openpyxl') as writer:
            df_data.to_excel(writer, sheet_name='完整数据', index=False)
        
        print(f"\n✅ 包含分类的完整数据已生成: {output_file}")
        print(f"📊 总记录数: {len(df_data)}")
        
        # 显示样本数据
        print(f"\n📋 数据样本:")
        print("行业名称\t指标大类\t指标名称\t年份")
        print("-" * 100)
        
        for i in range(min(5, len(df_data))):
            row = df_data.iloc[i]
            print(f"{row['行业名称'][:8]}\t{row['指标大类'][:10]}\t{row['指标名称'][:20]}\t{row['年份']}")
        
        return df_data
        
    except FileNotFoundError:
        print("❌ 未找到'整理后的行业指标数据.xlsx'文件")
        print("请先运行数据处理脚本生成基础数据文件")
        return None

def main():
    """主函数"""
    
    print("开始生成行业指标字典表...")
    
    # 1. 生成指标字典表
    df_dict = generate_indicator_dictionary()
    
    # 2. 创建包含分类的完整数据表
    df_integrated = create_integrated_data()
    
    print("\n" + "=" * 60)
    print("✅ 指标分类任务完成!")
    print("📁 生成的文件:")
    print("  1. 行业指标字典表.xlsx - 指标分类字典")
    print("  2. 行业指标数据_含分类.xlsx - 包含分类的完整数据")
    print("=" * 60)

if __name__ == "__main__":
    main()
